home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SPACE 1
/
SPACE - Library 1 - Volume 1.iso
/
program
/
363
/
tprolog1
/
farben
< prev
next >
Wrap
Text File
|
1990-02-03
|
3KB
|
81 lines
% Demonstration für TOY Prolog
% Problem : Einfärben einer "Karte" mit 4 Farben, so daß
% benachbarte Gebiete verschiedene Farben erhalten.
% Erweiterung eines Beispiels aus : Kluzniak/Szpakowicz,
% "Prolog for Programmers" (dort zitiert aus Pereira & Porto, 1980)
% Verwendete "Karte" :
% +-----------------+--------------------+
% | R3 | R6 |
% | +----+--+------+-------------+---+ |
% | | |R4| | | |
% +--+ +--+ | | |
% | | R2 |R5 | |
% | | | +--+
% | | | | |
% | +----------------------------+---+ |
% | R1 |
% +--------------------------------------+
% Folgendes Prädikat definiert die Relation "Farbe A darf an Farbe B angrenzen"
nachbarn(A, B) :- farbe(A), farbe(B), not A = B.
% Die Farben sind als Zahlen definiert (Füllmuster für die graphische
% Ausgabe, daher "krumme" Zahlen) :
farbe(2).
farbe(4).
farbe(6).
farbe(8).
% Die folgenden Prädikate geben die einzelnen Kartenflächen graphisch aus.
r1 :- grf_poly([192,184, 224,184, 224,248, 384,248, 384,216, 416,216,
416,280, 192,280, 192,184]).
r2 :- grf_poly([224,152, 256,152, 256,184, 288,184, 288,152, 352,152,
352,248, 224,248, 224,152]).
r3 :- grf_poly([192,120, 320,120, 320,152, 224,152, 224,184, 192,184,
192,120]).
r4 :- grf_poly([256,152, 288,152, 288,184, 256,184, 256,152]).
r5 :- grf_poly([352,152, 384,152, 384,248, 352,248, 352,152]).
r6 :- grf_poly([320,120, 416,120, 416,216, 384,216, 384,152, 320,152,
320,120]).
% Folgendes Prädikat findet eine Lösung des Problems :
lösung(R1, R2, R3, R4, R5, R6) :-
nachbarn(R1, R3), nachbarn(R1, R2), nachbarn(R1, R5), nachbarn(R1, R6),
nachbarn(R2, R3), nachbarn(R2, R4), nachbarn(R2, R5), nachbarn(R2, R6),
nachbarn(R3, R4), nachbarn(R3, R6),
nachbarn(R5, R6).
% Folgendes Prädikat sucht die nächste Lösung und gibt sie graphisch aus :
ausgabe :- lösung(R1, R2, R3, R4, R5, R6), grf_f_type(2),
grf_f_style(R1), r1,
grf_f_style(R2), r2,
grf_f_style(R3), r3,
grf_f_style(R4), r4,
grf_f_style(R5), r5,
grf_f_style(R6), r6.
% Folgendes Prädikat sucht alle Lösungen und gibt sie aus (zwischen zwei
% verschiedenen Lösungen wird auf einen Tastendruck gewartet).
farbenproblem :- grf_mode, see(keybd), ausgabe, rch, fail.
farbenproblem :- seen, txt_mode.
end.